home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 009 / unprotec.arc / ZAPPER.TXT < prev   
Text File  |  1983-11-17  |  13KB  |  240 lines

  1.  
  2.  
  3.  
  4.  
  5.            ___________________________________________________________________
  6.                     
  7.                                         THE ZAPPER
  8.           
  9.                                     Volume 1, Number 1
  10.                         For Registered Users Of FreeSoft Products
  11.            ___________________________________________________________________
  12.           
  13.                                 Copy Protecting Diskettes
  14.                                 -------------------------
  15.           
  16.           The Ultra-Format program has the capability to format diskettes that 
  17.           cannot be copied by DOS's DISKCOPY utility.  This article will 
  18.           explain how to use the Ultra-Format program to produce copy-protected 
  19.           diskettes.
  20.           
  21.           The whole idea behind producing copy-protected diskettes is to know 
  22.           exactly what DISKCOPY can and can't duplicate.  Specifically, 
  23.           DISKCOPY looks for and copies only the following:
  24.              1) Side 0 and Side 1
  25.              2) Tracks 0 to 39
  26.              3) Sectors 1 to 8 (512 bytes each).
  27.           
  28.           Knowing this, it is easy to confuse DISKCOPY by formatting a diskette 
  29.           outside of these "normal" limits.  Although we certainly can't format
  30.           more than two or less than one diskette sides, there are a number of 
  31.           other approaches we can take.  All disk drives we have used, for 
  32.           instance, have been able to format 1 or 2 more tracks than the 
  33.           manufacturer specifies.  On your IBM-PC, you could actually format 
  34.           tracks 40 and 41 if you wanted to.  Since DISKCOPY does not look for 
  35.           these tracks during a backup, (and, by the way, neither do many 
  36.           "pirate" backup programs), any copies made will not contain the 
  37.           information in these tracks.  Although, due to the way DOS handles 
  38.           free disk space, the extra tracks can't be used for programs or 
  39.           files, you can use the sectors in these tracks to contain special 
  40.           passwords.  Use the FORMAT STANDARD TRACK option in Ultra-Format to 
  41.           format a track 40 on a scratch diskette.  Then, using Ultra-Zap, go 
  42.           in with the DISPLAY/MODIFY DISK SECTOR function to insert a secret 
  43.           password into one of that track's sectors.  If your program has the 
  44.           ability to read a raw disk sector, this password can be checked for 
  45.           validity.  We will discuss this "read a sector" function in more 
  46.           detail later.
  47.           
  48.           Another good way to fool DISKCOPY is to format a standard track of 8 
  49.           sectors of 512 bytes each, but numbered weirdly (Sectors 32, 34, 5, 
  50.           93, 87, 2, 14, and 201, for instance).  Again, a password can be 
  51.           inserted and later verified in one of these sectors.  Remember that 
  52.           DISKCOPY expects the sectors to be numbered consecutively from 1 to 
  53.           8 and won't copy any others.
  54.           
  55.           Finally, you can also format a track containing sectors of a 
  56.           different length than 512 btyes.  The disk controller circuit in your 
  57.           IBM-PC has the ability to format sectors of either 128, 256, 512, or 
  58.           1024 bytes each.  You can forget about formatting a track of ten 1024 
  59.           byte sectors, though - there just isn't enough room on a track.  A 
  60.           good rule of thumb is to format sectors in relation to their size.  
  61.           That is, four 1024 byte sectors per track, eight 512 byte sectors 
  62.           per track, sixteen 256 byte sectors per track, or thirty two 128 byte 
  63.           sectors per track.  All of these combinations give the same number of 
  64.           available bytes for data.
  65.            2)
  66.           
  67.           When using sectors of other than 512 byte lengths, there is another 
  68.           matter to consider.  Several bytes in the Disk Parameter Table will 
  69.           have to be fiddled with in order to format a track correctly.  If you 
  70.           don't adjust these values, the resulting track will contain CRC 
  71.           errors.  CRC (cyclic redundency check) is just a checksum that is 
  72.           used by the disk controller circuit to confirm that data is being 
  73.           read properly.  Of course, you could purposefully format a track with 
  74.           CRC errors, try to read a sector, and verify that it is a non-pirated 
  75.           copy when it returns a CRC error code.  To do this, just format a 
  76.           track using the FORMAT NON-STANDARD TRACK option in Ultra-Format.  
  77.           When specifying sectors, go ahead and specify the first 7 sectors as 
  78.           would be found in a standard track (logical sector numbers 1 through 
  79.           7 with a length value of 2).  On the eight sector, specify a length 
  80.           value of 3 (meaning 256 bytes).  When sector 8 is later read 
  81.           (assuming the Disk Parameter Table bytes/sector value is changed to 
  82.           value 3), you should get a CRC error.
  83.           
  84.           Don't forget, when you later want to read odd-sized sectors, you will 
  85.           have to change the bytes per sector value in the Disk Parameter Table 
  86.           to reflect the sector's size.  Don't forget to restore this byte back 
  87.           to it's original value before doing other disk I/O or exiting your 
  88.           program.
  89.           
  90.           Here are the bytes in the Disk Parameter Table that will need to be 
  91.           modified before formatting oddly-sized (not 512 bytes) sectors:
  92.           
  93.           1) Byte #5 (Highest Sector Number On Track): This byte should contain 
  94.              the number of sectors you wish to format, not necessarily the      
  95.              highest logical sector number.
  96.           
  97.           2) Byte #6 (Gap Length For Diskette Reads): We're not exactly sure if 
  98.              this byte actually affects a format operation, but it doesn't hurt 
  99.              to go ahead and modify it.  The value should be changed in 
  100.              relation to the sector size.  For instance, if you're going to     
  101.              format a track of four 1024 byte sectors, cut the value in this    
  102.              byte in half.  Double it for sixteen 256 byte sectors and multiply 
  103.              it by four for thirty two 128 byte sectors.
  104.           
  105.           3) Byte #8 (Gap Between Sectors): This definitely needs to be changed 
  106.              before formatting.  Modify it in relation to the sector size, as   
  107.              was discussed in 2) above.
  108.           
  109.           All in all, getting a format that works is the result of 
  110.           experimentation.  Since we had no need for formatting copy-protected 
  111.           diskettes with our products, our experience with this is limited.  We 
  112.           would appreciate hearing about any particularly interesting 
  113.           copy-protection schemes you come up with using the Ultra-Utilities.
  114.           
  115.           Just putting a weirdly formatted track or sector on a diskette won't 
  116.           keep your programs from being copied.  DISKCOPY will go ahead and 
  117.           copy everything else.  Therefore, you will need to insert in your 
  118.           program some means of reading a given sector and checking a password 
  119.           in it before continuing with the execution of the program.
  120.           
  121.           There is really no easy way of doing this outside of an assembly 
  122.           language subroutine.  Fortunately, the routine needs only to be 10 or 
  123.           20 lines long since the IBM-PC BIOS contains a sector read 
  124.           subroutine.  This is accessed through the INTERRUPT 13H vector.
  125.            3)
  126.  
  127.           Basically, all your routine has to do is put certain values into the 
  128.           8088 registers and call this routine.  Here's the register setup 
  129.           that's required:
  130.           
  131.           AH=2 (this specifies a "READ" operation)
  132.           AL=1 (this specifies a single sector read)
  133.           ES:BX (address of the memory buffer you wish the sector data to       
  134.                 be copied into)
  135.           CH   (track number you wish to read 0-255)
  136.           CL   (sector number you wish to read 0-255)
  137.           DH   (side number you wish to read 0 or 1)
  138.           DL   (drive number you wish to use 0=Drive A, 1=Drive B, etc.)
  139.           
  140.           After filling these registers as required, execute an INT 13H 
  141.           instruction.  This does the actual sector read.  Afterwards, the 
  142.           CARRY flag is set if the read failed or is reset if the read was 
  143.           successful.  If an error occured, the AH register contains the error 
  144.           code.  Here are the meanings of the possible error codes:
  145.           
  146.           AH=1   Bad disk command was issued (registers setup correctly?)
  147.           AH=2   Address mark not found (track formatted?)
  148.           AH=3   Tried to write a write protected disk (AH=2 upon entry?)
  149.           AH=4   Sector not found
  150.           AH=8   Direct Memory Access overrun
  151.           AH=9   Direct Memory Access crossed a 64K boundary
  152.           AH=16  Cyclic redundency check error (CRC)
  153.           AH=32  Disk controller failure
  154.           AH=64  Track seek failed
  155.           AH=128 Drive timed out (drive door open?  disk mounted?)
  156.           
  157.           All of the above error codes are in decimal format.
  158.           -------------------------------------------------------------------
  159.           Once last caveat, although many drives are capable of formatting 
  160.           tracks higher than 39, most diskette manufacturers don't certify 
  161.           these tracks before selling the diskettes.
  162.           -------------------------------------------------------------------
  163.                                     MONTHLY UNPROTECTS
  164.                                     ------------------
  165.           The following tips are for those who are registered users of the 
  166.           software concerned.  Please don't rip off those who have worked hard 
  167.           to put such fine products on the market.
  168.           
  169.           LOTUS 1-2-3
  170.           -----------
  171.           This works with the newer releases of 1-2-3
  172.           1) RENAME 123.EXE 123.XYZ
  173.           2) DEBUG 123.XYZ
  174.           3) type U ABA9
  175.           4) you should see   INT 13    at that address
  176.           5) type E ABA9 90 90
  177.           6) type W
  178.           7) type Q
  179.           8) COPY 123.XYZ onto another diskette
  180.           9) RENAME 123.XYZ UNP123.EXE
  181.           
  182.           UNP123.EXE may now be freely copied and/or moved onto a hard disk.
  183.            4)
  184.           VISICALC
  185.           --------
  186.           1) Format a single sided diskette with FORMAT B:/S (or whatever drive 
  187.              letter is appropriate)
  188.           2) DEBUG
  189.           3) Put VisiCalc diskette in Drive A
  190.           4) type L 100 0 138 2
  191.           5) type M 0 3FF 7000
  192.           6) type R CS
  193.           7) write down this number (we'll call this Hold #1)
  194.           8) add 700H to this number and type this in.
  195.           9) type R DS
  196.           10) write down this number (we'll call this Hold #2)
  197.           11) add 700H to this number and type this in.         
  198.           12) Take the rightmost two digits of Hold #1 and insert those in 
  199.               place of the LL symbols in step 13.  Put the leftmost two digits  
  200.               in place of the HH in step 13.
  201.           13) type E 107 LL HH (substituting your values for LL & HH)
  202.           14) type E 24D BB A8 00 90
  203.           15) type G =1B8 26B
  204.           16) After a few burps and chirps, you will be back at the DEBUG       
  205.               prompt.
  206.           17) type R CS
  207.           18) type in the value you saved as Hold #1
  208.           19) type R DS
  209.           20) type in the value you saved as Hold #2
  210.           21) type R BX
  211.           22) type the number 0
  212.           23) type R CX
  213.           24) if you have VC version 1.0, type the number 6802, if you have     
  214.               version 1.1, type the number 6B64
  215.           25) remove the Visicalc diskette from Drive A and mount your freshly  
  216.               formatted diskette in Drive A
  217.           26) type N VC.COM
  218.           27) type W
  219.           28) type Q
  220.           
  221.           VC.COM can now be freely copied and placed on a hard disk.
  222.           
  223.           These unprotects have been garnered from various bulletin boards      
  224.           around the country.  If you've got a favorite unprotect, why not send 
  225.           it in for the next issue of THE ZAPPER!
  226.           ---------------------------------------------------------------------
  227.                                    LAST MINUTE ADDTION
  228.                                    -------------------
  229.           The following BASIC program lines will allow you to modify the Disk 
  230.           Parameter Table values:
  231.           20000 DEF SEG=0:A1%=120:A2%=PEEK(A1%)+256*PEEK(A1%+1)
  232.           20010 DEF SEG=PEEK(A1%+2)+256*PEEK(A1%+3)
  233.           20020 POKE A2%+3,3:'THIS PUTS A LENGTH OF VALUE OF 3 INTO THE THIRD
  234.           20030 '             BYTE (BYTES PER SECTOR VALUE) OF THE D.P.T.
  235.           20040 DEF SEG
  236.  
  237.  
  238.  
  239.  
  240.